Não tenho certeza de como realmente colocar minha pergunta em palavras, então deixe-me tentar explicá-la com um exemplo: Digamos que meu programa tenha um comportamento estranho em uma ação específica. Já encontrei algum código que é a causa desse comportamento estranho. Ao desabilitar essa sequência, não corro para esse comportamento. Infelizmente, preciso desse código porque outra coisa não está funcionando. Então, o que vou fazer a seguir é descobrir por que algo está diferente quando esse trecho de código está ativo. Para entender melhor o que está acontecendo, às vezes quero executar toda a ação, incluindo o 'código incorreto' e às vezes sem. Então, posso comparar o resultado, por exemplo, o que acontece na IU ou o que minha função retorna. A primeira abordagem que vem à minha mente é executar meu programa com o código habilitado, fazer o que eu quiser, então parar meu programa, comentar o código, recompilar e executar novamente. Hum ... isso parece idiota. Especialmente se eu precisar ativar novamente aquele código para ver em outra ocasião o outro comportamento e, em seguida, desligar novamente, ligar, desligar e assim por diante. Não é uma opção para mim usar pontos de interrupção e influenciar a ordem das instruções ou modificar valores para que eu execute ou não as instruções if, loops for etc. Dois exemplos: Eu depuro um comportamento crítico de tempo e quando eu interrompo o programa, o tempo muda significativamente. Portanto, o primeiro ponto de interrupção que posso definir deve estar no final da ação. 1 Espero que apareça uma dica de ferramenta ou outra janela que é 'suprimida' quando o foco é dado ao VS. Portanto, não posso usar nenhum ponto de interrupção. Nem no início nem no final da ação. Existe alguma técnica no Visual Studio 2012 que me permite marcar este código como opcional e posso decidir se desejo ou não executar essa sequência de código antes de executar a ação? Eu penso em algo como if (true | false) em um nível superior. Não estou procurando uma solução em que precise executar meu programa novamente várias vezes. Nesse caso, eu ainda poderia fazer a abordagem simples de simplesmente comentar o código com #if false. 1 Observe que, é claro, posso definir um ponto de interrupção quando preciso olhar para uma variável específica em uma determinada posição (se não tiver escrito o valor na saída), mas irei desligar os pontos de interrupção novamente para executar toda a ação em um vai.
2020-12-07 23:10:27
No depurador do Visual Studio, você pode definir um ponto de interrupção bem na frente do seu "código em questão". Quando o código parar nesse ponto, você pode optar por deixá-lo continuar ou pode clicar com o botão direito em qualquer outra linha e selecionar Definir próxima instrução. É uma opção meio estranha, mas passei a apreciá-la. | A única opção que consigo pensar é adicionar algo à sua IU que só aparece durante a depuração, dando a você a opção de incluir / excluir as operações em questão. Enquanto você está nisso, talvez você queira habilitar a redefinição do aplicativo para um "estado conhecido" da IU também. | Eu penso em algo como if (true | false) em um nível superior. Por que "em um nível superior"? Por que não usar exatamente isso? Você deseja que um trecho de código seja executado às vezes, às vezes não, e a opção deve ser alterada em tempo de execução, não em tempo de compilação - isso obviamente leva a if (condição) { // código em jogo } O problema aqui é o tipo de condição que você usará - talvez uma variável definida como verdadeira na versão de lançamento do seu código e como falsa às vezes na versão de depuração. Talvez o valor seja obtido de um arquivo de configuração, talvez de uma variável de ambiente, talvez calculado por algum tipo de lógica em seu programa, como e quando você quiser. EDITAR: você também pode introduzir uma variável booleana em seu código para condição, inicializá-la como verdadeira por padrão e alterar seu valor usando o depurador sempre que quiser. | As diretivas do pré-processador podem ser o que você procura. Eles são pedaços de código para o compilador executar, identificáveis começando com um caractere # (e estilisticamente, por padrão, eles não seguem o padrão de indentação do seu código, em vez disso, sempre residem firmemente na borda esquerda do editor ): #define INCLUDE_DODGY_CODE public void MyMethodWithDodgyBits () { #if INCLUDE_DODGY_CODE myDodgyMethod (); #fim se myOkMethod (); } Neste caso, se #define INCLUDE_DODGY_CODE foi incluído, a chamada myDodgyMethod () será compilada em seu programa. Caso contrário, a chamada será ignorada pelo compilador e simplesmente não existirá em seu binário. | Existem algumas opções para depurar conforme você pede. O Visual Studio tem várias opções para navegar diretamente pelo código. Você pode usar o recurso Definir próxima instrução para mover diretamente para uma instrução específica. Você também pode editar valores diretamente por meio da Janela Imediata, do QuickWatch e da dica de ferramenta que paira sobre as variáveis durante a depuração. O Visual Studio também tem a capacidade de reproduzir o histórico de execução. Dê uma olhada no IntelliTrace para começar. Pode ser útil quando você tem várias áreas de preocupação interagindo e gerando a condição de erro. Você também pode agrupar suas seções de código em blocos condicionais e definir as variáveis condicionais conforme apropriado. Isso pode ser durante a depuração ou pode passar parâmetros por meio de um arquivo de configuração. Usar verificações condicionais pode ser mais fácil do que percorrer manualmente o código, se houver várias instruções que você deseja excluir. | Algumas vezes depende da versão do VS e da linguagem, mas você pode felizmente editar o código (para comentá-lo ou envolvê-lo em um grande #ifdef 0) e pressionar alt + F10 e o compilador irá recompilar, vincular novamente e continuar a execução como se você nunca tivesse mexido nele. Mas enquanto isso funciona perfeitamente em VC ++ (desde VS v6 IIRC), C # pode ter problemas - eu acho (com VS2010) que não posso editar e continuar desta forma com funções contendo quaisquer instruções lambda (principalmente linq) e código de 64 bits nunca fiz isso também. Ainda assim, vale a pena experimentar, pois às vezes é muito útil. | Eu trabalhei em aplicativos que têm código opcional usado para depuração sozinho que não deve aparecer no ambiente de produção. Este segmento de código opcional foi mais fácil de controlar usando um arquivo de configuração, pois não exigia uma recompilação para ser alterado. Essa correção pode não ser o fim de tudo para o resultado final, mas pode ajudar a superar até que uma correção seja encontrada. Se você tiver várias seções opcionais que precisam ser testadas em combinação, esse estilo de correção pode exigir várias chaves no arquivo de configuração, o que pode ser uma desvantagem e um incômodo de controlar. | Sua pergunta não é exatamente clara, o que é possivelmente o motivo de tantas respostas que você acha que são inválidas. Você pode considerar reformulá-lo se ninguém parecer capaz de responder à pergunta. Correndo o risco de dar outra resposta inválida, acrescentarei algumas informações sobre como lidei com o problema no passado. A maneira mais fácil é colocar qualquer código opcional dentro #if DEBUG // Código opcional aqui #fim se Dessa forma, quando você executa no modo de depuração, o código é implementado e quando você executa no modo de lançamento, não. Alternar entre os dois requer clicar em um botão. Também resolvi o mesmo problema de maneira semelhante com um sinalizador simples: bool runOptionalCode = false; então if (runOptionalCode) { // Coloque o código opcional aqui } Novamente,alternar entre os modos requer a mudança de uma palavra, portanto é uma tarefa simples. Você menciona isso em sua pergunta, mas desconsidera por razões que não são claras. Como eu disse, requer muito pouco esforço para alternar entre os dois. Se você precisar fazer alterações entre o código enquanto ele está em execução, a melhor maneira é usar um item de interface do usuário ou um pressionamento de tecla que modifica o sinalizador mencionado no exemplo acima. Dependendo de sua aplicação, porém, isso pode exigir mais esforço do que vale a pena. No passado, descobri que, quando tenho um ouvinte de chave já implementado como parte do projeto, alguns pressionamentos de tecla decidem se devo executar meu código de depuração (opcional) funciona melhor. Em um aplicativo sem ouvintes principais, prefiro ficar com um dos métodos anteriores. | sua resposta StackExchange.ifUsing ("editor", function () { StackExchange.using ("externalEditor", function () { StackExchange.using ("snippets", function () { StackExchange.snippets.init (); }); }); }, "partes de codigo"); StackExchange.ready (function () { var channelOptions = { tags: "" .split (""), id: "1" }; initTagRenderer ("". split (""), "" .split (""), channelOptions); StackExchange.using ("externalEditor", function () { // Tem que disparar o editor após os snippets, se os snippets estiverem habilitados if (StackExchange.settings.snippets.snippetsEnabled) { StackExchange.using ("snippets", function () { createEditor (); }); } outro { createEditor (); } }); function createEditor () { StackExchange.prepareEditor ({ useStacksEditor: false, heartbeatType: 'answer', autoActivateHeartbeat: false, convertImagesToLinks: true, noModals: true, showLowRepImageUploadWarning: true, reputaçãoToPostImages: 10, bindNavPrevention: true, postfix: "", imageUploader: { brandingHtml: "Powered by \ u003ca href = \" https: //imgur.com/ \ "\ u003e \ u003csvg class = \" svg-icon \ "width = \" 50 \ "height = \" 18 \ "viewBox = \ "0 0 50 18 \" fill = \ "none \" xmlns = \ "http: //www.w3.org/2000/svg \" \ u003e \ u003cpath d = \ "M46.1709 9.17788C46.1709 8.26454 46,2665 7,94324 47,1084 7.58816C47.4091 7,46349 47,7169 7,36433 48,0099 7.26993C48.9099 6,97997 49,672 6,73443 49,672 5.93063C49.672 5,22043 48,9832 4,61182 48,1414 4.61182C47.4335 4,61182 46,7256 4,91628 46,0943 5.50789C45.7307 4,9328 45,2525 4,66231 44,6595 4.66231C43.6264 4,66231 43,1481 5,28821 43.1481 6.59048V11.9512C43.1481 13.2535 43.6264 13.8962 44.6595 13.8962C45.6924 13.8962 46.1709 13.2535 46.1709 11.9512V9.17788Z \ "/ \ u003e \ u003cpath d = \" M32.492 10.1439219 C32.492.492. 41.5985 12.6954 41.5985 10.1419V6.59049C41.5985 5.28821 41.1394 4.66232 40.1061 4.66232C39.0732 4.66232 38.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.5455 37.0454 11.5204 11.5204 11.5458.5948.5948 5.28821 38.5948 6.59049V9.60062C38.5948 10.8521 38.2696 11.5455 37.0454 11.520 11.520 11.5204 11.520 11.5204 11.5204 11.5458 11.5204 11.5204 11.5204 11.520 c 11.5204 11.520. 521 35.4954 9.60062V6.59049C35.4954 5.28821 35.0173 4.66232 34.0034 4.66232C32.9703 4.66232 32.492 5.28821 32.492 6.59049V10.1419Z \ "/ \ u003e \ u003cpath fill-rule = \" evenodd \ "clip-rule = \" evenodd \ "clip-rule = ” .1369 4.56087 21.0134 6.57349 21.0134 9.27932C21.0134 11.9852 23.003 13,913 25.3754 13.913C26.5612 13,913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.7799 28.772.1 12.8346C 25.3754 13.913C26.5612 13,913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28.1161 12.7799 28.7799 2877121 12.8346C 25.3754 13.913C26.5612 13,913 27.4607 13.4902 28.1109 12.6616C28.1109 12.7229 28,1161 12.7799 287799 2877323 12.8346C 28.1256.1 12.34.273 12.34.273.228.125.303 12.34.273 12.34.273. 15,2321 24,1352 14,9821 23,5661 14.7787C23.176 14,6393 22,8472 14,5218 22,5437 14.5218C21.7977 14,5218 21,2429 15,0123 21,2429 15.6887C21.2429 16,7375 22,9072 17,6335 25,6622 17.6335ZM24.1317 9.27932C24.1317 7,94324 24,9928 7,09766 26,1024 7.09766C 28,0918 7,94324 7,09766 27,2119 28,0918 9.27932C28.0918 10,6321 27,2311 11,5116 26,1024 11.5116C24.9737 11,5116 24,1317 10,6491 24,1317 9.27932Z \ "/ \ u003e \ u003cpath d = \" M16.8045 11.9512C16.8045 17,2637 13,8962 18,2965 13,2535 13,8962 13.8962C19.3298 19,8079 13,2535 19,8079 11.9512V8.12928C19.8079 5,82936 18,4879 4,62866 16,4027 4.62866C15.1594 4,62866 14,279 4,98375 13,3609 5.88013C12.653 5,05154 11,6581 4,62866 10,3573 4.62866C9.34336 4,62866 8,57809 4,89931 7,9466 5.5079C7.58314 4,9328 7,10506 4,66232 6,51203 4,66232 4.66232C5.47873 5,00066 5,28821 5,00066 6.59049V11.9512C5.00066 13,2535 5,47873 13,8962 6,51203 13.8962C7.54479 13,8962 8,0232 13,2535 8,0232 11.9512V8.90741C8.0232 7,58817 8,44431 6,91179 9,53458 6.91179C10.5104 6,91179 10,893 7,58817 10,893 8.94108V11.9512C10.893 13,2535 11,3711 13,8962 12,4044 13,8962 C13,4375 13,8962 13,9157 13,2535 13,9157 11,9512V8.90741C13,9157 7,58817 14,3365 6,91179 15,4269 6,91179C16,4027 6,91179 16,8045 7,58817 16,8045 8,94108V11.9512Z \ "/ \ u003e \ u003cpath d = \ "M3.31675 6.59049C3.31675 5.28821 2.83866 4.66232 1.82471 4.66232C0.791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13.2535 0.791758 13.8962 1.82471 4.66232C0.791758 4.66232 0.313354 5.28821 0.313354 6.59049V11.9512C0.313354 13,2535 0.791758 13.8962 1.82471C6213579813,2535 3,31675 11.9512V6.59049Z \ "/ \ u003e \ u003cpath d = \" M1.87209 0.400291C0.843612 0,400291 0 1,1159 0 1.98861C0 0,822846 3,57676 1,87209 2,87869 3.57676C2.90056 3,57676 3,7234 2,87869 3,7234 2,90056 0,400291 1.98861C3.7234 1,1159 1,87209 0,400291Z \ "fill = \" # 1BB76E \ "/ \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e", contentPolicyHtml: "Contribuições do usuário licenciadas sob \ u003ca href = \" https: //stackoverflow.com/help/licensing \ "\ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \" https://stackoverflow.com / legal / content-policy \ "\ u003e (política de conteúdo) \ u003c / a \ u003e", allowUrls: true }, onDemand: true, discardSelector: ".discard-answer" , imediatamenteShowMarkdownHelp: true, enableSnippets: true }); } }); Obrigado por contribuir com uma resposta para Stack Overflow! Certifique-se de responder à pergunta. Forneça detalhes e compartilhe sua pesquisa! Mas evite ... Pedir ajuda, esclarecimento ou responder a outras respostas. Fazer declarações com base em opinião; apoie-os com referências ou experiência pessoal. Para saber mais, veja nossas dicas sobre como escrever boas respostas. Rascunho salvo Rascunho descartado Cadastre-se ou faça o login StackExchange.ready (function () { StackExchange.helpers.onClickDraftSave ('# login-link'); }); Inscreva-se usando o Google Cadastre-se usando o Facebook Inscreva-se usando e-mail e senha Enviar Postar como convidado Nome O email Obrigatório, mas nunca mostrado StackExchange.ready ( function () { StackExchange.openid.initPostLogin ('. New-post-login', 'https% 3a% 2f% 2fstackoverflow.com% 2fquestions% 2f19425104% 2fcan-i-mark-some-code-as-optional-while-debugging-in visual-studio-2012% 23new-answer ',' question_page '); } ); Postar como convidado Nome O email Obrigatório, mas nunca mostrado Publique a sua resposta Descartar Ao clicar em “Publique sua resposta”, você concorda com nossos termos de serviço, política de privacidade e política de cookies Não é a resposta que você está procurando? Navegue por outras questões marcadas como depuração visual-studio ou faça sua própria pergunta.